export default class EventBus extends EventTarget{
  constructor(){
    super()
    // 定义一个数组保存创建的事件对象
    // 数组内形式 
    // {eventObj: 事件对象, eventName: 事件名}
    this.events = []
  }

  // 绑定事件
  $on(event,cb){
    // 创建事件, 放入事件数组中
    this.events.push({
      eventObj: new Event(event),
      eventName: event
    })
    // 绑定事件
    this.addEventListener(event,cb)
  }

  // 触发事件
  $emit(event,...args){
    // 在数组中查找和event对象名相同的对象,并触发
    const e = this.events.find(res=>res.eventName === event)
    // 如果找不到,抛出错误
    if(!e) return new Error("还未绑定事件,请先绑定事件")
    // 存储参数
    e.args = args
    // 触发事件
    this.dispatchEvent(e.eventObj)
  }
}